package caralibrobd;

//<editor-fold defaultstate="collapsed" desc="Importaciones">
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
//</editor-fold>

//<editor-fold defaultstate="expanded" desc="Clase Serializador">
/**
 *
 * @author yaiza y merce
 */
public final class Serializador {

    //<editor-fold defaultstate="collapsed" desc="Métodos Serialización (serializeObject, deSerializeObject, isExistFile)">
    /**
     * Serializa objetos.
     *
     * @param fileName Nombre del archivo a guardar.
     * @param object   Objeto a guardar.
     * @return Devuelve (true) si no hubo errores al grabar los datos del
     *         objeto.
     */
    public static boolean serializeObject(String fileName, Object object) {
        boolean correcto = true;
        FileOutputStream archivo = null;
        ObjectOutputStream salida = null;

        try {
            archivo = new FileOutputStream(fileName);
            salida = new ObjectOutputStream(archivo);
            salida.writeObject(object);
            salida.flush();
            salida.close();
        } catch (IOException e) {
            correcto = false;
        } finally {
            try {
                if (salida != null) {
                    salida.flush();
                    salida.close();
                }
            } catch (IOException e1) {
                correcto = false;
            }
        }
        return correcto;
    }

    /**
     * Deserializa objetos. Lee los datos de un objeto guardado de un archivo.
     *
     * @param fileName Nombre del archivo a guardar.
     * @return Devuelve el objeto leído.
     */
    public static Object deSerializeObject(String fileName) {
        Object object = null;
        FileInputStream archivo = null;
        ObjectInputStream entrada = null;

        try {
            if (isExistFile(fileName)) {
                archivo = new FileInputStream(fileName);
                entrada = new ObjectInputStream(archivo);
                object = entrada.readObject();
                entrada.close();
            }
        } catch (IOException | ClassNotFoundException e) {
        } finally {
            try {
                if (entrada != null) {
                    entrada.close();
                }
            } catch (IOException e1) {
            }
        }
        return object;
    }

    /**
     * Determina si un archivo existe.
     *
     * @param file Ruta y nombre del archivo.
     * @return True si existe el archivo.
     */
    public static boolean isExistFile(String file) {
        try {
            return new File(file).exists();
        } catch (Exception e) {
        }
        return false;
    }
//</editor-fold>
}
//</editor-fold>
